/********************************** (C) COPYRIGHT *******************************
* File Name          : interact.h
* Author             : nx666
* Version            : V1.0.0
* Date               : 2023/03/6
* Description        : foc交互模块这里声明接口.
*******************************************************************************/
#ifndef __INTERACT_H
#define __INTERACT_H

#ifdef __cplusplus
extern "C" {
#endif

#include "common_type.h"
#include "driver.h"
#include "semphr.h"
#include "sampling.h"

/**********************************宏定义区******************************/
#define LOG_TX_BUF_SIZE 3072
#define LOG_RX_BUF_SIZE 128

/******************************* *类型定义区******************************/
typedef struct bufSet{
    uInt32     len;       
    uInt8     *pWrite;           //指向下一个要写的位置
    uInt8     *pRead;            //指向下一个要读的位置
    uInt8     *bufBegin;            //buf开始的位置
    uInt8     *bufEnd;              //buf结束的位置
    uInt32     rCount;              //读计数
    uInt32     wCount;              //写计数
} bufSet;
typedef struct logSet{
    bufSet txBufObj;
    QueueHandle_t txBufSemp;
    bufSet rxBufObj;
    QueueHandle_t rxBufSemp;
}logSet;

/********************************函数声明区******************************/
 /*********************************************************************
 * @fn      foc_msgTxBufWrite
 *
 * @brief   写log到msgTxBuf里.
 *
 * @param   pBuffer - log地址. size - 待发送log的长度
 *
 * @return  None
 */
void foc_msgTxBufWrite(char *pBuffer, int size);

 /*********************************************************************
 * @fn      foc_msgRxBufRead
 *
 * @brief   从msgRxBuf里读数据，如果缓存区里数据 < bufLen,则读完缓存区
 *
 * @param   pBuffer - 读出的数据存放地址. bufLen - 要读的长度
 *
 * @return  成功返回读到数据长度，失败返回-1
 */
int foc_msgRxBufRead(char *pBuffer, int bufLen);

/*********************************************************************
 * @fn      thread_interact
 *
 * @brief   与外界交换的线程，
 *              void
 *
 * @return  FUNC_SOK，成功  FUNC_FAIL，失败
 *          
 */
Int thread_interact(void *arg);

 /*********************************************************************
 * @fn      foc_showCurrent
 *
 * @brief   发生一帧电流数据
 *
 * @param   pSet - 保存电流数据
 *
 * @return  None
 */
Int32 foc_showCurrent(sampling_ *pSet);

 /*********************************************************************
 * @fn      printTheta
 *
 * @brief   打印当前电角度
 *
 * @param   theta 电角度， Ia 电流
 *
 * @return  None
 */
Int32 printTheta(_iq theta,_iq Ia);

 /*********************************************************************
 * @fn      printData
 *
 * @brief   打印数据
 *
 * @param   theta 电角度， Ia 电流
 *
 * @return  None
 */
Int32 printData(float *ch,Int len);

extern float printMat[];

#ifdef __cplusplus
}
#endif

#endif /*__INTERACT_H */